'use strict'
const fs = require('fs');

class image {
    constructor() {
    }

    //! 后端接收图片，将图片作为对象属性包含：imgname，answer，id
    //! 存储到一个imgArr数组中 
    async post(c) {
        //! 获取answer
        let answer = c.body.answer;
        // console.log(answer);
        //! 根据name获取文件对象
        let f = c.getFile('image', -1);
        // console.log(f);
        if (!f) {
            return c.status(400).send('image not found');
        }
        // c.service.idArr=[];
        //! 根据传入的原始文件名字生成唯一文件名，主要使用原始文件f.filename的扩展名
        for (var i = 0; i < f.length; i++) {
            let imgname = c.helper.makeName(`${f[i].filename}`);
            //! 移动文件到指定位置   文件名=时间戳+answer
            await c.moveFile(f[i], `${c.service.imagePath}/${imgname}${answer[i]}.png`);
        }
    }

    // upload页面请求验证码图片进行管理 
    async list(c) {
        // 读取images文件夹目录
        let files = fs.readdirSync(c.service.imagePath);
        c.send(files);
        // token.js获取到初始imgArr数据
        for (let j = 0; j < files.length; j++) {
            let obj = {};
            let id = j + Math.round((Math.random() * 100));
            let code = files[j].slice(-8, -4);
            obj.answer = code;
            obj.imgname = files[j]
            obj.id = id;
            c.service.imgArr.push(obj);
            c.service.idArr.push(obj.id);
        }
    }

    // 响应upload页面删除请求，删除某一验证码图片
    async delete(c) {
        let imgname = c.param.id;
        // 删除相同元素的值
        Array.prototype.removeByValue = function (val) {
            for (var i = 0; i < this.length; i++) {
                if (this[i] === val) {
                    this.splice(i, 1);
                    i--;
                }
            }
            return this;
        }
        let filePath;
        filePath = `${c.service.imagePath}/${imgname}`;
        fs.unlinkSync(filePath);//删除images中对应的验证码图片

        // imgArr idArr进行对象存储，保证token.js，user.js获取到删除后的数据
        let files = fs.readdirSync(c.service.imagePath);
        c.service.imgArr=[];
        c.service.idArr=[];
        // console.log(files)
        for (let j = 0; j < files.length; j++) {
            let obj = {};
            let id = j + Math.round((Math.random() * 100));
            let code = files[j].slice(-8, -4);
            obj.answer = code;
            obj.imgname = files[j]
            obj.id = id;
            c.service.imgArr.push(obj);
            c.service.idArr.push(obj.id);
        }

        // 发给前端删除后的images目录，保证动态更新
        c.send(files);
    }
    //! 返回给用户端图片数据  冒号表示这个路由后面这 'name' 是动态变化的
    async get(c) {
        //! c.param是一个对象，其中的key值是路由参数的名称
        let imgname = c.param.id;
        await c.helper.pipe(`${c.service.imagePath}/${imgname}`, c.reply)
    }
}
module.exports = image;
